package com.sojson.project.entity.po;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;

import com.sojson.base.impl.BaseDto;
import com.sojson.constant.Constant;
import com.sojson.enums.EBalanceCount;
import com.sojson.enums.EBalanceType;
import com.sojson.project.sys.user.entity.po.User;
import com.sojson.util.DateUtil;
import com.sojson.util.SystemParamUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 佣金记录表Bean
 * 
 * @author liu
 * @date 2021-03-16
 */
@ApiModel("佣金记录表Bean")
public class BalanceLog extends BaseDto {

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    private static final long serialVersionUID = 1615864295530L;

    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("分佣金额")
    private BigDecimal total;
    @ApiModelProperty("当前金额")
    private BigDecimal totalThis;
    @ApiModelProperty("类型(1:诚意金,2:兼职订单,3:提现到微信,4:酒店订单,5:商城订单,6:推广用户,7:分销,8:提现到余额)")
    private Integer type;
    @ApiModelProperty("分销类型(1:兼职订单,2:酒店订单,3:商城订单)")
    private Integer divideType;
    @ApiModelProperty("金额类型(1:佣金,2:余额)")
    private Integer totalType;
    @ApiModelProperty("计算 1增加 2扣减")
    private Integer count;
    @ApiModelProperty("所属会员ID")
    private String mid;
    @ApiModelProperty("订单号(诚意金为诚意金订单编号,兼职为兼职订单编号,提现为提现订单编号,酒店为酒店订单编号,商城为商城订单编号,推广为被推广的用户ID,分销为订单编号)")
    private String orderNo;
    @ApiModelProperty("备注")
    private String mark;
    @ApiModelProperty("创建时间")
    private Date createdAt;
    @ApiModelProperty("更新时间")
    private Date updatedAt;
    /** 佣金记录表集合 */
    private ArrayList<Integer> ids;
    /** 佣金记录表集合 */
    private ArrayList<BalanceLog> balanceLogs;

    /**
     * 以上由工具自动生成，以下为手动添加
     */

       /**
        * Empty constructor
        */
    public BalanceLog() {

    }

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    /**
     * 获取标题
     * 
     * @return
     */
    public String getTitle() {
        return title;
    }

    /**
     * 设置标题
     * 
     * @param title
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * 获取 分佣金额
     */
    public BigDecimal getTotal() {
        return total;
    }

    /**
     * 设置 分佣金额
     */
    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    /**
     * 获取当前金额
     * 
     * @return
     */
    public BigDecimal getTotalThis() {
        return totalThis;
    }

    /**
     * 设置当前金额
     * 
     * @param totalThis
     */
    public void setTotalThis(BigDecimal totalThis) {
        this.totalThis = totalThis;
    }

    /**
     * 获取 类型(1:诚意金,2:兼职订单,3:提现到微信,4:酒店订单,5:商城订单,6:推广用户,7:分销,8:提现到余额)
     */
    public Integer getType() {
        return type;
    }

    /**
     * 设置 类型(1:诚意金,2:兼职订单,3:提现到微信,4:酒店订单,5:商城订单,6:推广用户,7:分销,8:提现到余额)
     */
    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 获取计算 1增加 2扣减
     * 
     * @return
     */
    public Integer getCount() {
        return count;
    }

    /**
     * 设置计算 1增加 2扣减
     * 
     * @param count
     */
    public void setCount(Integer count) {
        this.count = count;
    }

    /**
     * 获取 所属会员ID
     */
    public String getMid() {
        return mid;
    }

    /**
     * 设置 所属会员ID
     */
    public void setMid(String mid) {
        this.mid = mid;
    }

    /**
     * 获取订单号(诚意金为诚意金订单编号,兼职为兼职订单编号,提现为提现订单编号,酒店为酒店订单编号,商城为商城订单编号,推广为被推广的用户ID,分销为订单编号)
     * 
     * @return
     */
    public String getOrderNo() {
        return orderNo;
    }

    /**
     * 设置订单号(诚意金为诚意金订单编号,兼职为兼职订单编号,提现为提现订单编号,酒店为酒店订单编号,商城为商城订单编号,推广为被推广的用户ID,分销为订单编号)
     * 
     * @param orderNo
     */
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    /**
     * 获取 备注
     */
    public String getMark() {
        return mark;
    }

    /**
     * 设置 备注
     */
    public void setMark(String mark) {
        this.mark = mark;
    }

    /**
     * 获取 创建时间
     */
    public Date getCreatedAt() {
        return createdAt;
    }

    /**
     * 设置 创建时间
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * 获取 更新时间
     */
    public Date getUpdatedAt() {
        return updatedAt;
    }

    /**
     * 设置 更新时间
     */
    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    /**
     * 获取分销类型(1:兼职订单,2:酒店订单,3:商城订单)
     * 
     * @return
     */
    public Integer getDivideType() {
        return divideType;
    }

    /**
     * 设置分销类型(1:兼职订单,2:酒店订单,3:商城订单)
     * 
     * @param divideType
     */
    public void setDivideType(Integer divideType) {
        this.divideType = divideType;
    }

    /**
     * 获取金额类型(1:佣金,2:余额)
     * 
     * @return
     */
    public Integer getTotalType() {
        return totalType;
    }

    /**
     * 设置金额类型(1:佣金,2:余额)
     * 
     * @param totalType
     */
    public void setTotalType(Integer totalType) {
        this.totalType = totalType;
    }

    /**
     * 获取 佣金记录表集合
     */
    public ArrayList<Integer> getIds() {
        return ids;
    }

    /**
     * 设置 佣金记录表集合
     */
    public void setIds(ArrayList<Integer> ids) {
        this.ids = ids;
    }

    /**
     * 获取 佣金记录表集合
     */
    public ArrayList<BalanceLog> getBalanceLogs() {
        return balanceLogs;
    }

    /**
     * 设置 佣金记录表集合
     */
    public void setBalanceLogs(ArrayList<BalanceLog> balanceLogs) {
        this.balanceLogs = balanceLogs;
    }

    /**
     * 以上由工具自动生成，以下为手动添加
     * @throws Exception 
     */

    /**
     * 插入初始化
     * 
     * @param title     标题
     * @param mid           所属用户ID
     * @param total         金额
     * @param totalThis     用户当前余额
     * @param type          类型(1:诚意金,2:兼职订单,3:提现到微信,4:酒店订单,5:商城订单,6:推广用户,7:分销,8:提现到余额)
     * @param divideType    分销类型(1:兼职订单,2:酒店订单,3:商城订单)
     * @param totalType     金额类型(1:佣金,2:余额)
     * @param count         计算 1增加 2扣减
     * @param orderNo       订单号(诚意金为诚意金订单编号,兼职为工资订单编号,提现为提现订单编号,酒店为酒店订单编号,商城为商城订单编号,推广为被推广的用户ID,分销为订单编号)
     * @param mark          备注
     */
    public void insertInit(String title, String mid, BigDecimal total, BigDecimal totalThis, Integer type,
        Integer divideType, Integer totalType, Integer count, String orderNo, String mark) {
        setTitle(title);
        setMid(mid);
        setTotal(total);
        setTotalThis(totalThis);
        setType(type);
        setDivideType(divideType);
        setTotalType(totalType);
        setCount(count);
        setOrderNo(orderNo);
        setMark(mark);
        Date nowDate = DateUtil.nowDate();
        setCreatedAt(nowDate);
        setUpdatedAt(getCreatedAt());
    }

    /**
     * 注册用户初始化
     * 
     * @param title     标题
     * @param member    用户信息
     * @param totalThis 用户当前余额
     * @throws Exception
     */
    public void insertInitRegister(String title, User member, BigDecimal totalThis) throws Exception {
        setTitle(title);
        setMid(member.getTopId());
        setTotal(new BigDecimal(SystemParamUtil.getInt(Constant.INVITE_BALANCE)));
        setTotalThis(totalThis);
        setType(EBalanceType.REGISTER.getCode());
        setCount(EBalanceCount.ADD.getCode());
        setCreatedAt(member.getCreateTime());
        setUpdatedAt(member.getUpdateTime());
    }

}